package com.common.bus.task;

import com.google.gson.Gson;

import java.lang.reflect.Type;
import java.util.List;

/** gson类型转换的工具类
 * Created by chenxunlin01 on 2017/10/12.
 */

public class GsonUtils {

    /**
     * json字符串转换为指定的泛型的httpResult
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> HttpResult<T> fromJsonObject(String json, Class<T> clazz) {
        Type type = new ParameterizedTypeImpl(HttpResult.class, new Class[]{clazz});
        return new Gson().fromJson(json, type);
    }

    /**
     * json字符串转换为指定的集合泛型的httpResult
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> HttpResult<List<T>> fromJsonArray(String json, Class<T> clazz) {
        // 生成List<T> 中的 List<T>
        Type listType = new ParameterizedTypeImpl(List.class, new Class[]{clazz});
        // 根据List<T>生成完整的Result<List<T>>
        Type type = new ParameterizedTypeImpl(HttpResult.class, new Type[]{listType});
        return new Gson().fromJson(json, type);
    }

}
